package middleware

import (
	"smc-admin/response"

	"github.com/gin-gonic/gin"
	"github.com/go-sql-driver/mysql"
)

func Error() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		defer func() {
			err := recover()
			if err != nil {
				switch err := err.(type) {
				case response.Body:
					response.Error(ctx, err)
				case string:
					if len(err) == 0 {
						response.Error(ctx)
					} else {
						response.Error(ctx, response.Body{
							Msg: err,
						})
					}
				case *mysql.MySQLError:
					response.Error(ctx, response.Body{
						Msg: err.Message,
					})
				default:
					response.Error(ctx)
				}
			}
			ctx.Abort()
		}()
		ctx.Next()
	}
}
